package chapter07

/**
  *
  * @author Pop
  * @date 2022/6/27 22:09
  */
object Test01_ImmutableArray {
  def main(args: Array[String]): Unit = {
      // 不可变的集合，数组

      val arr:Array[Int] = new Array[Int](5)

      // 另一种创建的方式 Array的伴生对象
      val arr2 = Array.apply(12,34,56)
        val arr3 = Array(12,34,56)

      // 对数组的操作

      // 访问元素
      println(arr2(0))

    //  修改元素
      arr2(0)=3

    // 遍历
    for(i<-0 until  arr.length){
      println(arr(i))
    }

    //def indices: Range = 0 until length
    for(i<- arr.indices){
      println(arr(i))
    }

    // 增强循环
    for(i<-arr)println(i)

    // 迭代器
    val iter = arr.iterator
    while(iter.hasNext){
      println(iter.next())
    }

    // scala 中调用foreach方法

    arr.foreach(println)

    arr.foreach((i:Int)=>println(i))

    // 将数组join的方法
    println(arr2.mkString("-"))

    // 添加元素 这是:+方法，他会在原有长度上+1，并复制当前数组到新的数组上，并返回
    val nArr:Array[Int] = arr2.:+(73)

    // 之前说了 :+方法是将新的元素添加到尾部，那么 +: 就是把元素添加到头部
    val newArr2:Array[Int] = arr2.+:(76)

    /**
      * 之前说过 scala的所有的操作其实都是方法的调用，
      *
      * 所以，其实 方法的调用，以 . 来调用，其实是可以 用空格隔开的
      * ，然后如果你的参数只有一个，那么也可以省略冒号。
      * 5 + 3
      */
    // 那么根据上面的，这个也可以写成
    var nArr3:Array[Int] = arr2 :+ 30
    //但是你这样写就不行了
//    var nArr4:Array[Int] = arr2 +: 30 error
    // 因为scala默认会认为，以冒号结尾的，会认为对象在右边也就是
      // 其实这样更容易理解，添加在数组的前面，你也可以加多个
      var nArr4:Array[Int] = 12 +: 30 +: arr2 :+ 36
  }
}
